package cn.edu.imnu.Service.impl;

import cn.edu.imnu.Service.SaleService;
import cn.edu.imnu.entity.Result;
import cn.edu.imnu.entity.dto.SaleListdto;
import cn.edu.imnu.entity.dto.Saleadddto;
import cn.edu.imnu.entity.dto.Saleupdatedto;
import cn.edu.imnu.entity.po.Sale;
import cn.edu.imnu.entity.vo.SaleListvo;
import cn.edu.imnu.mapper.SaleMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
* @author Administrator
* @description 针对表【sale】的数据库操作Service实现
* @createDate 2025-06-04 17:37:22
*/
@Service
@MapperScan("cn/edu/imnu/mapper")
public class SaleServiceImpl
implements SaleService{

    @Autowired
    private SaleMapper saleMapper;

    @Override
    public SaleListvo selectByCondition(SaleListdto dto) {
        // 设置分页参数（currentPage和pageSize可能为null，需做默认值处理）
        Integer currentPage = dto.getCurrentPage() != null ? dto.getCurrentPage() : 1;
        Integer pageSize = dto.getPageSize() != null ? dto.getPageSize() : 10;
        // 启动分页（PageHelper会自动拦截后续的查询SQL，添加LIMIT语句）
        PageHelper.startPage(currentPage, pageSize);
        // 执行查询（实际会被PageHelper改写为：SELECT * FROM sale LIMIT (currentPage-1)*pageSize, pageSize）
        List<SaleListdto> saleList = saleMapper.selectByCondition(dto);
        // 通过PageInfo获取分页信息（总记录数、总页数等）
        PageInfo<SaleListdto> pageInfo = new PageInfo<>(saleList);
        // 封装结果到SaleListvo
        SaleListvo saleListvo = new SaleListvo();
        saleListvo.setList(pageInfo.getList());       // 分页后的数据列表
        saleListvo.setTotal(pageInfo.getTotal());     // 总记录数
        saleListvo.setCurrentPage(pageInfo.getPageNum());  // 当前页
        saleListvo.setPageSize(pageInfo.getPageSize());    // 每页条数
        return saleListvo;
    }
    @Override
    public Result deleteSale(Long saleId) {
        // 校验参数是否合法
        if (saleId == null || saleId <= 0) {
            return Result.error("销售记录 ID 不合法");
        }

        // 执行删除操作
        int affectedRows = saleMapper.deleteByPrimaryKey(saleId);

        // 根据结果返回响应
        if (affectedRows > 0) {
            return Result.success("销售记录删除成功");
        } else {
            return Result.error("未找到 ID 为 " + saleId + " 的销售记录");
        }
    }

    @Override
    public Result updateSale(Saleupdatedto dto) {
        // 1. 校验 saleId 是否存在
        if (dto.getSaleId() == null) {
            return Result.error("saleId 不能为空");
        }

        // 2. DTO 转 PO（Sale）
        Sale sale = new Sale();
        BeanUtils.copyProperties(dto, sale);

        // 3. 调用 Mapper 动态更新
        int rows = saleMapper.updateByPrimaryKeySelective(sale);
        if (rows == 0) {
            return Result.error("未找到对应记录，修改失败");
        }

        return Result.success("修改成功");
    }

    @Override
    public Result addSale(Saleadddto saleadddto) {
        // 校验必填字段（示例：saleName和salePhone非空）
        if (saleadddto.getSaleName() == null || saleadddto.getSalePhone() == null) {
            return Result.error("姓名和电话不能为空");
        }
        Date now = new Date();
        saleadddto.setCreatetime(now);
        saleadddto.setUpdatetime(now);
        // 执行插入
        int count = saleMapper.insertSale(saleadddto);
        if (count > 0) {
            return Result.success("销售信息添加成功");
        }
        return Result.error("销售信息添加失败");
    }
}
